# 本文件用于驱动的创建
# 添加等待
# 屏幕截图
# 清空输入框
# 设计单例模式

import datetime
import os
import sys

from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

class Driver:
    driver = ""  # 驱动对象
    def __init__(self):
        # 本地驱动所在路径
        chrome_driver_path = "E:\\Python\\chromedriver-win64\\chromedriver.exe"
        options = Options()
        options.add_argument("--remote-allow-origins=*")
        # 创建驱动
        self.driver = webdriver.Chrome(service=Service(chrome_driver_path), options=options)
        # 添加隐式等待
        self.driver.implicitly_wait(2)

    # 屏幕截图功能
    # ../images/当前日期/调用函数名-当前具体日期.png
    def GetScreenShot(self):
        # 文件夹名称（以日期为划分）
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        # 判断该文件名是否存在
        # 不存在就创建
        if not os.path.exists("../images/" + dirname):
            os.mkdir("../images/" + dirname)
        # 截图文件名前面跟上调用方法的名称（不同的调用方法对应的不同的截图）
        # 文件名
        filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"
        self.driver.save_screenshot("../images/" + dirname + "/" + filename)

    # 清空指定输入框的内容
    def ClearInput(self, element):
        actions = ActionChains(self.driver)
        actions.click(element)  # 点击元素
        actions.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL)  # Ctrl+A
        actions.send_keys(Keys.DELETE)  # 删除
        actions.perform()  # 执行所有动作

# 创建单例
QESDriver = Driver()